package com.zykj.java8.lambda;


import com.sun.org.apache.xpath.internal.operations.Bool;
import org.apache.commons.lang.StringUtils;

import java.sql.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Title: MapReduceDemo
 * @Project: ${MODEL_NAME}
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 46
 * @since 2018/12/21-22:46
 */
public class MapReduceDemo {

    public static void main(String[] args) {
        // 高阶函数的使用
        List<String> strList = Arrays.asList("Java", "c", "","Bean","Bean", "Demo", "Eavalute");

        //map 的使用》》 map 作用于集合的每个元素  对每个元素进行处理
        strList.stream().map(str -> {
            if (StringUtils.isNotBlank(str)) {
                if (str.length() <= 2) {
                    return str + "***";
                }
                return str;
            }
            return "空字符串》被map 函数处理了";
        }).forEach(System.out::println);

        System.out.println("reduce 的使用》》》》》》》》》》》》》》》》");
        //reduce 的使用  》》  reduce 的作用是将集合中每个元素都集合起来， 类似SQL 中的   sum
        List<Integer> intList = Arrays.asList(110, 120, 200, 2, 232, 122, 545);
        Optional<Integer> reduce = intList.stream().reduce((sum, coust) -> sum + coust);
        System.out.println(reduce.get());

        System.out.println("》》》》》》》》》》处理掉为空的字符串 并将其他字符转换大小写");
        String context = strList.stream().filter(s -> StringUtils.isNotBlank(s))
                .map(s -> s.toUpperCase()).collect(Collectors.joining(","));
        System.out.println(context);
        System.out.println("》》》》》》》》》》过滤重复的值");
        // 定义过滤的 lambda 表达式， 断言操作
        Predicate<String> filterEmpty = sblank -> StringUtils.isNotBlank(sblank);
        String distStr = strList.stream().filter(filterEmpty).distinct().collect(Collectors.joining(","));
        System.out.println("distStr:" + distStr);
    }
}
